Building SaaS Solutions on AWSのハンズオンをやってみた
はじめに
こんにちは。大阪オフィスの林です。
SaaS on AWSで求められる設計コンセプトやベストプラクティスを学び直したく、何か良いコンテンツあるかなぁー?っと探していたらピッタリのハンズオンがあったのでご紹介させて頂きたいと思います。
なお、リンクを見て頂ければわかるのですが「SaaS on AWS」以外にも様々なサービスや技術カットの日本語ハンズオンが用意されていますので、興味があるものを探して触ってみるのもオモシロそうです!
SaaS on AWSハンズオンのコンセプト
このハンズオンのコンセプトは下記となっていて、ベストプラクティスに沿ったSaaS on AWSを学べそうです。
SaaS は、マルチテナンシー、オンボーディング、セキュリティ、データパーティショニング、テナント分離、アイデンティティなどを組み合わせた、独自の課題を開発者に与えます。
SaaS のアーキテクチャの原則を理解するための最良の方法の1つは、SaaS の設計、構築、および最適化の実際の例を掘り下げることです。このブートキャンプワークショップでは、SaaS ソリューションの動作を確認できるリファレンス SaaS アーキテクチャにダイブすることで、SaaS アーキテクチャのコアコンセプトを紹介します。
ワークショップの参加者は、このソリューションに対する一連の操作を行って、SaaS 環境の機能を実現および拡張するためのコードと構成を導入する実践的な演習を行えます。実用的なリファレンスソリューションのレンズを通した講義と演習で、AWS のベストプラクティスに沿った SaaS ついてより深い洞察を得ることができます。
SaaS on AWSハンズオンの対象者
- AWS での SaaS ソリューションの実装について詳しく知りたいアプリケーション開発者とアーキテクト
ハンズオンコンテンツは、SaaSの初心者を対象としているようですが、SaaS開発のバックグラウンドがある場合でも、AWSにおけるSaaSデリバリーついて詳しく知ることができるとのことです。
やってみた
本ハンズオンは大きく3つのステップに分かれています。
- LAB 1 - アイデンティティとオンボーディング
- LAB 2 - マルチテナントセキュリティとユーザーロール
- LAB 3 - データ分離
冒頭ご紹介させていただいたハンズオンのリンクにアクセスすると、LABに入る前の準備として環境をデプロイするためのCloudFormationのテンプレートが予め用意されていますので、早速進めていきたいと思います。
なお、ハンズオンの手順内に「特に指定がない場合、CloudFormation スタックを作成する際のパラメータはデフォルトのまま何も変更しないでください。」
とあるのでそのまま進めてみます。
CloudFormationのデプロイは大体7分くらいで作成が完了しました。
作成されるリソースはLambda関数やS3バケットがほとんどで、以降のLABで必要なリソースなどは各LABの中で作成していくみたいなので早速やっていきたいと思います!
LAB 1 - アイデンティティとオンボーディング
LAB1では、下記の順序に従ってテナントとユーザーをオンボードおよび認証するためのコンポーネントを整えていきます。
- ユーザーアイデンティティの作成と管理
- ユーザーの管理
- テナントの管理
- オンボーディングと認証プリケーション
- テナントコンテキストの取得
下記の図はLAB1で扱う主要なコンポーネントを示したものです。
- 一番上のS3バケットのアイコンがある部分は、オンボーディングと認証フローのユーザーインターフェースを提供するWebアプリケーションです。
- API Gatewayを介してマイクロサービスに接続します。
- API Gatewayの下には、オンボーディングフローをサポートするために必要な様々なマイクロサービスがあります。
- テナント登録サービス(Tenant Registration) は、オンボーディングプロセスのオーケストレーターです。
- テナント登録サービス(Tenant Registration) は、Amazon Cognitoにユーザーを作成するユーザー管理サービス (User Manager) とテナントを作成するテナント管理サービス (Tenant Manager) を呼び出します。
- 認証管理サービス (Authentication Manager) は、ユーザー管理サービスを介してユーザーを認証します。
これらのリソースを冒頭の順序に従って作成してくのがLAB1のようです。
LAB 2 - マルチテナントセキュリティとユーザーロール
続いてLAB2です。
前述のLAB1ではテナントをオンボーディングし、ユーザーアイデンティティとテナントアイデンティティの作成を実施していきました。
LAB2では、実際にマルチテナントの概念を理解するために、サンプルの「商品管理サービス」をシングルテナントで構築し、その「商品管理サービス」をマルチテナント対応のサービスに進化させるための操作を実施していきます。
LAB2も順序が定められているので、下記の順序に従って操作を進めていきます。
- シングルテナントの商品管理マイクロサービスをデプロイ
- マルチテナントデータパーティショニングの導入
- ユーザーアイデンティティからテナントコンテキストを抽出
- パーティショニングを検証するために2つ目のテナントを導入
下記の図はLAB2で関連する主要なコンポーネントを示したもので、このLABでは「商品カタログを作成しそのカタログに対して注文する」というシンプルな商品管理サービスが展開されます。
LAB2時点では、コンピューティングリソースとストレージリソースはすべてのテナントで共有されていますが、そのあたりのテナント分離の操作についてはLAB3で触れていくようです。
LAB 3 - データ分離
最後のLABとなるLAB3です。
LAB3では、主にテナント分離について学んでいきます。
このハンズオンでは、DynamoDBテーブルに存在するデータを分離する方法に焦点が当てられており、アプリケーションデータを保持する商品テーブルおよび注文テーブルに存在するテナントデータを正常に分離する方法が解説されています。
LAB3は、下記の順序に従って操作を進めていきます。
- クロステナントアクセスの例
- プロビジョニングされた IAM ポリシーの設定
- クロステナントアクセス (意図的または非意図的) を防ぐために使用できるポリシーの紹介
- ユーザーロールのポリシーへのマッピング
- テナントスコープのクレデンシャルの取得
- クロステナント・スコープを明示的に実施する方法について説明
まとめ
ハンズオン形式で手を動かしながら学びなおすと更に理解が深まった気がします。SaaS on AWSに限らずぜひ興味のあるサービスのハンズオンを試してみていただくと良い学びになると思います!
なお、ハンズオンで作成した一部のリソースはコストが掛かり続けるものもありますのでハンズオン完了後に削除しておくことをオススメします!!!
以上、大阪オフィスの林がお送りしました!